package com.ssy.lingxi.product.service;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.model.vo.PageVO;
import com.ssy.lingxi.common.model.vo.SelectVO;
import com.ssy.lingxi.product.api.model.request.BrandRequest;
import com.ssy.lingxi.product.api.model.request.CheckRequest;
import com.ssy.lingxi.product.api.model.response.BrandResponse;
import com.ssy.lingxi.product.entity.Brand;
import com.ssy.lingxi.product.entity.BrandCheckRecord;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * 品牌管理类
 *
 * @author jw.chen
 * @version 2.0.0
 * @date 2020/6/22
 */
public interface IBrandService {
    /**
     * 查询品牌--商品能力
     *
     * @param pageVO 分页实体
     * @param name   品牌名称
     * @param status 品牌状态(0-代表查全部,2-待审核,3-审核不通过,4-审核通过)
     * @return Wrapper<Page < Brand>>
     */
    Page<Brand> getBrandList(UserLoginCacheDTO sysUser, PageVO pageVO, String name, Integer status);

    /**
     * 查询待审核品牌列表--商品能力
     *
     * @param pageVO 分页实体
     * @param status 品牌状态(0-代表查全部,2-待审核,3-审核不通过,4-审核通过)
     * @return 列表
     */
    Page<Brand> getUnCheckBrandList(UserLoginCacheDTO sysUser,PageVO pageVO,String name, String memberName,Integer status);

    /**
     * 查询品牌
     *
     * @param id 品牌id
     * @return Wrapper<Brand>
     */
    Brand getBrand(UserLoginCacheDTO sysUser, Long id);

    /**
     * 添加/修改品牌
     *
     * @param brandRequest 请求参数体
     * @return 操作结果
     */
    Long saveOrUpdateBrand(UserLoginCacheDTO sysUser, BrandRequest brandRequest);

    /**
     * 删除品牌
     *
     * @param id 品牌id
     * @return 操作结果
     */
    String deleteBrand(UserLoginCacheDTO sysUser, Long id);

    /**
     * 启用/停用
     *
     * @param id       品牌id
     * @param isEnable 启用/停用
     * @return 操作结果
     */
    String updateBrandEnable(UserLoginCacheDTO sysUser, Long id, Boolean isEnable);

    /**
     * 提交审核
     *
     * @param id 品牌id
     * @return 操作结果
     */
    String applyCheckBrand(UserLoginCacheDTO sysUser, Long id);

    /**
     * 查询品牌审核记录
     *
     * @return Wrapper<?>
     */
    List<BrandCheckRecord> getBrandCheckRecord(Long brandId);

    /**
     * 查询品牌下拉框
     *
     * @param name 品牌名称
     * @return 操作结果
     */
    List<SelectVO> getSelectBrand(Long memberId, Long memberRoleId, String name);

    /**
     * 查询品牌下拉框--平台后台
     *
     * @param name 品牌名称
     * @return 操作结果
     */
    List<SelectVO> getSelectPlatformBrand(String name);

    /**
     * 查询品牌--平台后台
     *
     * @param pageVO 分页实体
     * @param name 品牌名称
     * @param status 品牌状态(0-代表查全部,2-待审核,3-审核不通过,4-审核通过)
     * @return Wrapper<Page < Brand>>
     */
    Page<Brand> getPlatformBrandList(PageVO pageVO, String name, Integer status);

    /**
     * 查询品牌 -- 平台后台
     *
     * @param id 品牌id
     * @return Brand
     */
    Brand getBrand(Long id);

    /**
     * 审核-平台后台
     *
     * @param checkRequest 审核实体
     * @return 操作结果
     */
    Long checkPlatformBrand(UserLoginCacheDTO sysUser, CheckRequest checkRequest);

    /**
     * 审核-商品能力
     * @param sysUser 当前登录用户
     * @param checkRequest 审核实体
     * @return 操作结果
     */
    Long checkBrand(UserLoginCacheDTO sysUser, CheckRequest checkRequest);
    /**
     * 通过id查询品牌
     *
     * @param idList 品牌ids
     * @return 操作结果
     */
    List<Brand> getBrandByIdList(List<Long> idList);

    void initToRedis();

    /**
     * 查询待审核品牌列表--平台后台
     *
     * @param pageVO 分页实体
     * @param status 品牌状态(0-代表查全部,2-待审核,3-审核不通过,4-审核通过)
     * @return 列表
     */
    Page<Brand> getPlatformUnCheckBrandList(PageVO pageVO, Integer status);


    /**
     * 根据会员品类获取品牌
     *
     * @param customerCategoryId
     * @return
     */
    List<BrandResponse> getBrandListByCustomerCategoryId(Long customerCategoryId);

    /**
     * 根据平台品类id获取品牌
     *
     * @param categoryId
     * @return
     */
    List<BrandResponse> getBrandListByCategoryId(Long categoryId);

}
